#include <iostream>
#include<functional>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>

void handler(int signo)
{
    std::cout<<"我收到了一个信号"<<signo<<std::endl;
}

int main()
{
    // signal(8,handler);
    signal(11,handler);

    sleep(2);
    int *ptr=nullptr;
    *ptr=1;
    // int a=1;
    // a/=0;
    printf("我的进程崩溃了\n");
    return 0;
}

// using func_t=std::function<void()>;
// std::vector<func_t> cd;

// void FlushDisk()
// {
//     std::cout<<"我是一个刷盘操作"<<std::endl;
// }

// void sched()
// {
//     std::cout<<"我是一个进程调度"<<std::endl;
// }

// void handler(int sign)
// {
//     (void)sign;
//     for(auto&e:cd)
//     {
//         e();
//     }
//     std::cout<<"我是一个信号捕捉函数，我被调用了"<<std::endl;
//     alarm(1);
// }

// int main()
// {
//     cd.push_back(FlushDisk);
//     cd.push_back(sched);
//     signal(SIGALRM,handler);
//     alarm(1);
//     while(true)
//     {
//         pause();
//     }
// }

// int cnt=0;

// void handler(int sign)
// {
//     std::cout<<"捕捉到一个信号: "<<sign<<"当前计数器:"<<cnt<<std::endl;
//     // alarm(3);
// }

// int main(int argc,char*argv[])
// {
//     alarm(1);
//     signal(SIGALRM,handler);
//     while(true)
//     {
//         cnt++;
//         // printf("%d\n",cnt++);
//     }
//     // alarm(3);
//     // sleep(2);
//     // int n=alarm(0);
//     // std::cout<<"剩余时间:"<<n<<std::endl;

//     // signal(14,handler);
//     // while(true)
//     // {
//     //     std::cout<<"I am a process"<<std::endl;
//     //     sleep(1);
//     // }

//     // if(argc!=3)
//     // {
//     //     std::cerr<<"Usage: "<<argv[0]<<" signnumber pid"<<std::endl;
//     //     return 1;
//     // }

//     // int signnumber=std::stoi(argv[1]);
//     // pid_t pid=std::stoi(argv[2]);

//     // int n=kill(pid,signnumber);
//     // if(n<0)
//     // {
//     //     perror("kill");
//     //     return 2;
//     // }

//     // signal(6,handler);
//     // while(true)
//     // {
//     //     sleep(1);
//     //     // raise(2);
//     //     abort();
//     // }
//     return 0;
// }